// admin/system/handler/sys_logininfor_handler.go
package handler

import (
	"go-admin1/admin/system/model"
	"go-admin1/admin/system/service"
	"go-admin1/internal/common/utils"
	"strconv"

	"github.com/gin-gonic/gin"
)

// SysLogininforHandler 登录信息处理器
type SysLogininforHandler struct {
	logininforService service.SysLogininforService
}

// NewSysLogininforHandler 创建登录信息处理器实例
func NewSysLogininforHandler(logininforService service.SysLogininforService) *SysLogininforHandler {
	return &SysLogininforHandler{
		logininforService: logininforService,
	}
}

// Create 创建登录信息
func (h *SysLogininforHandler) Create(c *gin.Context) {
	var logininfor model.SysLogininfor
	if err := c.ShouldBindJSON(&logininfor); err != nil {
		utils.FailResponse[string](c, "参数解析失败: "+err.Error())
		return
	}

	if err := h.logininforService.Create(&logininfor); err != nil {
		utils.FailResponse[string](c, "创建登录信息失败: "+err.Error())
		return
	}
	utils.OkResponseNoDataWithMessage[string](c, "创建登录信息成功")
}

// GetByID 根据ID获取登录信息
func (h *SysLogininforHandler) GetByID(c *gin.Context) {
	idStr := c.Param("id")
	id, err := strconv.ParseInt(idStr, 10, 64)
	if err != nil {
		utils.FailResponse[string](c, "参数解析失败: "+err.Error())
		return
	}

	logininfor, err := h.logininforService.GetByID(id)
	if err != nil {
		utils.FailResponse[string](c, "获取登录信息: "+err.Error())

		return
	}
	utils.OkResponse(c, logininfor)
}

// Delete 删除登录信息
func (h *SysLogininforHandler) Delete(c *gin.Context) {
	idStr := c.Param("id")
	id, err := strconv.ParseInt(idStr, 10, 64)
	if err != nil {
		utils.FailResponse[string](c, "参数解析失败: "+err.Error())

		return
	}

	if err := h.logininforService.Delete(id); err != nil {
		utils.FailResponse[string](c, "删除登录信息失败: "+err.Error())
		return
	}
	utils.OkResponseNoDataWithMessage[string](c, "删除登录信息成功")
}

// List 登录信息列表
func (h *SysLogininforHandler) List(c *gin.Context) {
	page, _ := strconv.Atoi(c.DefaultQuery("page", "1"))
	pageSize, _ := strconv.Atoi(c.DefaultQuery("pageSize", "10"))

	logininfors, total, err := h.logininforService.List(page, pageSize)
	if err != nil {
		utils.FailResponse[string](c, "获取登录信息列表失败: "+err.Error())
		return
	}
	resultData := map[string]interface{}{
		"list":  logininfors,
		"total": total,
	}
	utils.OkResponse(c, resultData)
}

// CleanAll 清空登录信息
func (h *SysLogininforHandler) CleanAll(c *gin.Context) {
	if err := h.logininforService.CleanAll(); err != nil {
		utils.FailResponse[string](c, "清空登录信息失败: "+err.Error())
		return
	}
	utils.OkResponseNoDataWithMessage[string](c, "清空登录信息成功")
}
